package org.example.ai04.service;
import org.example.ai04.entity.User;
import org.example.ai04.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
 * 用户服务类
 * 提供用户注册、查询等核心业务逻辑
 * 负责用户数据的业务处理，包括密码加密、数据验证等
 */
@Service
public class UserService {
    // 注入用户仓库，用于数据访问操作
    @Autowired
    private UserRepository userRepository;

    // 注入密码编码器，用于密码加密
    @Autowired
    private PasswordEncoder passwordEncoder;

    /**
     * 用户注册方法
     * 验证用户信息并创建新用户
     * @param user 包含注册信息的User对象
     * @return 注册成功的User对象
     * @throws RuntimeException 当用户名或邮箱已存在时抛出
     */
    public User register(User user) {
        // 验证用户名是否已存在
        if (userRepository.existsByUsername(user.getUsername())) {
            throw new RuntimeException("用户名已存在");
        }
        // 验证邮箱是否已存在
        if (userRepository.existsByEmail(user.getEmail())) {
            throw new RuntimeException("邮箱已存在");
        }
        
        // 对密码进行加密处理
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        // 保存用户信息到数据库
        return userRepository.save(user);
    }

    /**
     * 根据用户名查找用户
     * @param username 用户名
     * @return 找到的User对象
     * @throws RuntimeException 当用户不存在时抛出
     */
    public User findByUsername(String username) {
        // 使用仓库方法查找用户，如果不存在则抛出异常
        return userRepository.findByUsername(username)
                .orElseThrow(() -> new RuntimeException("用户不存在: " + username));
    }

    /**
     * 检查用户名是否已存在
     * @param username 要检查的用户名
     * @return 如果用户名已存在返回true，否则返回false
     */
    public boolean existsByUsername(String username) {
        return userRepository.existsByUsername(username);
    }
}